package com.pro.service.imple;

import com.pro.mapper.SystemIndexMapper;
import com.pro.pojo.JsCourse;
import com.pro.pojo.JsMicrocirclePlus;
import com.pro.pojo.JsUser;
import com.pro.pojo.OrderQuantity;
import com.pro.service.SystemIndexService;
import com.pro.utils.DateTimeUtils;
import com.pro.utils.MD5Util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.*;

/**
 * @Author 谭金诚
 * @Description TODO
 * @Date 2022/1/7 16:00
 * @Version 1.0
 */
@Service
public class SystemIndexServiceImple implements SystemIndexService {

    @Autowired
    private SystemIndexMapper mapper;

    @Override
    public OrderQuantity getSystemIndexNums() {
        OrderQuantity orderQuantity = new OrderQuantity();
        Integer courseNoNums = mapper.getToExamineNums(2,"2");//待审核课程 type:2（课程） result:2（待审核）
        Integer commodityNoNums = mapper.getToExamineNums(3,"2");//待审核商品 type:3（商品） result:2（待审核）
        Integer microCircleNoNums = mapper.getToExamineNums(4,"2");//待审核微圈 type:4（微圈） result:2（待审核）
        Integer returnRequest = mapper.getOrderQuantityStatus(7);//退订数量
        Integer commodityNums = mapper.getCommodityNums(1,"1");//查询上架商品总数 productSate:1（上架） result:1 （审核通过）
        Integer courseNums = mapper.getCourseNums(2,4);//查询上架课程总数 courseStatus:2（上架） courseCstatus:4（审核通过）
        Integer microCircleNums = mapper.getMicroCircleNums(2,3);//查询发布微圈总数 show:2 （显示） details:3 （已通过）
        Integer completedOrder = mapper.getOrderQuantityStatus(6);//已完成订单总数
        orderQuantity.setCourseNoNums(courseNoNums);
        orderQuantity.setCommodityNoNums(commodityNoNums);
        orderQuantity.setMicroCircleNoNums(microCircleNoNums);
        orderQuantity.setReturnRequest(returnRequest);
        orderQuantity.setCommodityNums(commodityNums);
        orderQuantity.setCourseNums(courseNums);
        orderQuantity.setMicroCircleNums(microCircleNums);
        orderQuantity.setCompletedOrder(completedOrder);
        return orderQuantity;
    }

    @Override
    public Integer getBeforeUserNums(String startDate, String endDate) {
        Integer beforeUserNums = mapper.getBeforeUserNums(startDate, endDate);
        return beforeUserNums;
    }

    @Override
    public Map<String, Object> getNowMonthCourseNums() {
        Map<String , Object> map = new HashMap<>();
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.MONTH,-1);
        Integer nowMonthCourseNums = mapper.getNowMonthCourseNums(sdf.format(date),2,"1");//type:2（课程） result:1（审核通过）
        Integer lastMonthCourseNums = mapper.getNowMonthCourseNums(sdf.format(cal.getTime()),2,"1");
        map.put("nowMonthCourseNums",nowMonthCourseNums);
        map.put("lastMonthCourseNums",lastMonthCourseNums);
        return map;
    }

    @Override
    public Map<String, Object> getNowMonthProductNums() {
        Map<String , Object> map = new HashMap<>();
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.MONTH,-1);
        Integer nowMonthCourseNums = mapper.getNowMonthProductNums(sdf.format(date),3,"1");//type:3（商品） result:1（审核通过）
        Integer lastMonthCourseNums = mapper.getNowMonthProductNums(sdf.format(cal.getTime()),3,"1");
        map.put("nowMonthProductNums",nowMonthCourseNums);
        map.put("lastMonthProductNums",lastMonthCourseNums);
        return map;
    }

    @Override
    public Map<String, Object> getNowMonthUserNums() {
        Map<String , Object> map = new HashMap<>();
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.MONTH,-1);
        Integer nowMonthCourseNums = mapper.getNowMonthUserNums(sdf.format(date));
        Integer lastMonthCourseNums = mapper.getNowMonthUserNums(sdf.format(cal.getTime()));
        map.put("nowMonthUserNums",nowMonthCourseNums);
        map.put("lastMonthUserNums",lastMonthCourseNums);
        return map;
    }

    @Override
    public Map<String, Object> getCourseDay() {
        Object o = null;
        Map<String, Object> map = new HashMap<>();
        //月数
        int monthNumber = DateTimeUtils.getDaysOfMonth(new Date());
        //每个月
        int[] monthList = new int[monthNumber];
        //每个月内的创建总数
        int[] monthDate = new int[monthNumber];
        //根据每月获取的创建数量
        Map<String, String> courseDate = mapper.getCourseDate("%d",2,"1");//type:2（课程） result:1（审核通过）
        Integer day = 0;
        for (int i = 0; i < monthNumber; i++) {
            ++day;
            //根据key获取对应的val
            if (day < 9){
                o = courseDate.get("0" + day);
            }else {
                o = courseDate.get(day + "");
            }
            Object z = courseDate.get("15");
            if (o != null){
                String s = String.valueOf(o);
                //截取每月内的创建总数
                String substring = s.substring(s.indexOf('=') + 1, s.indexOf(','));
                monthDate[i] = Integer.parseInt(substring);
            }
            monthList[i] = day;
        }
        map.put("data", monthDate);
        map.put("list", monthList);
        return map;
    }

    @Override
    public Map<String, Object> getProductDay() {
        Object o = null;
        Map<String, Object> map = new HashMap<>();
        //月数
        int monthNumber = DateTimeUtils.getDaysOfMonth(new Date());
        //每个月
        int[] monthList = new int[monthNumber];
        //每个月内的创建总数
        int[] monthDate = new int[monthNumber];
        //根据每月获取的创建数量
        Map<String, String> courseDate = mapper.getProductDate("%d",3,"1");//type:2（商品） result:1（审核通过）
        Integer day = 0;
        for (int i = 0; i < monthNumber; i++) {
            ++day;
            //根据key获取对应的val
            if (day < 9){
                o = courseDate.get("0" + day);
            }else {
                o = courseDate.get(day + "");
            }
            Object z = courseDate.get("15");
            if (o != null){
                String s = String.valueOf(o);
                //截取每月内的创建总数
                String substring = s.substring(s.indexOf('=') + 1, s.indexOf(','));
                monthDate[i] = Integer.parseInt(substring);
            }
            monthList[i] = day;
        }
        map.put("data", monthDate);
        map.put("list", monthList);
        return map;
    }

    @Override
    public Map<String, Object> getBeforeUserDay() {
        Object o = null;
        Map<String, Object> map = new HashMap<>();
        //月数
        int monthNumber = DateTimeUtils.getDaysOfMonth(new Date());
        //每个月
        int[] monthList = new int[monthNumber];
        //每个月内的创建总数
        int[] monthDate = new int[monthNumber];
        //根据每月获取的创建数量
        Map<String, String> courseDate = mapper.getBeforeUserDate("%d");
        Integer day = 0;
        for (int i = 0; i < monthNumber; i++) {
            ++day;
            //根据key获取对应的val
            if (day < 9){
                o = courseDate.get("0" + day);
            }else {
                o = courseDate.get(day + "");
            }
            Object z = courseDate.get("15");
            if (o != null){
                String s = String.valueOf(o);
                //截取每月内的创建总数
                String substring = s.substring(s.indexOf('=') + 1, s.indexOf(','));
                monthDate[i] = Integer.parseInt(substring);
            }
            monthList[i] = day;
        }
        map.put("data", monthDate);
        map.put("list", monthList);
        return map;
    }

    @Override
    public JsCourse getCourseStatusNums(JsCourse jsCourse) {
//        jsCourse.setCourseStatus(2);//courseStatus:2（上架）
//        jsCourse.setCourseCstatus(4);//courseCstatus:4（审核通过）
//        JsCourse courseStatusNums = mapper.getCourseStatusNums(jsCourse);
        return new JsCourse();
    }

    //修改用户信息
    @Override
    public boolean updateUser(JsUser user) {
        if(user.getPassword() != null){
            String newPass = MD5Util.md5(user.getPassword());
            user.setPassword(newPass);
        }
        boolean flag = mapper.updateUser(user);
        return flag;
    }

    //获取教师首页信息
    @Override
    public OrderQuantity getSystemIndexTeacherNums() {
        OrderQuantity orderQuantity = new OrderQuantity();
        Integer courseNoNums = mapper.getToExamineNums(2,"2");//待审核课程 type:2（课程） result:2（待审核）
        Integer microCircleNoNums = mapper.getToExamineNums(4,"2");//待审核微圈 type:4（微圈） result:2（待审核）
        Integer courseNums = mapper.getCourseNums(2,4);//查询上架课程总数 courseStatus:2（上架） courseCstatus:4（审核通过）
        JsCourse jsCourse = new JsCourse();
        jsCourse.setCourseStatus(2);//courseStatus:2（上架）
        jsCourse.setCourseCstatus(4);//courseCstatus:4（审核通过）
        JsCourse courseStatusNums = mapper.getCourseStatusNums(jsCourse);//课程浏览数、收藏量、点赞量
        JsMicrocirclePlus microCircleStatusNums = mapper.getMicroCircleStatusNums(2, 3);//微圈数量、点赞数量
        orderQuantity.setCourseNoNums(courseNoNums);
        orderQuantity.setMicroCircleNoNums(microCircleNoNums);
        orderQuantity.setCourseNums(courseNums);
        orderQuantity.setCourseBrowseNums(courseStatusNums.getLookNum());
        orderQuantity.setCourseCollectionNums(courseStatusNums.getCollectNum());
        orderQuantity.setCourseLikeNums(courseStatusNums.getLikeNum());
        orderQuantity.setMicroCircleNums(microCircleStatusNums.getMicrocircleNums());
        orderQuantity.setMicroCircleActicleLike(microCircleStatusNums.getActicleLike());
        return orderQuantity;
    }

    //查询运营首页信心
    @Override
    public OrderQuantity getSystemIndexOperateNums() {
        OrderQuantity orderQuantity = new OrderQuantity();
        Integer commodityNums = mapper.getCommodityNums(1,"1");//查询上架商品总数 productSate:1（上架） result:1 （审核通过）
        Integer commoditySaleNums = mapper.getCommoditySaleNums(6, 3);//商品销量总数 orderStatus：6 已签收 orderType：3 商品
        Integer commodityCollectionNums = mapper.getCommodityCollectionNums(3);//商品收藏总数 collectionType：3 商品
        Integer completedOrder = mapper.getOrderQuantityStatus(6);//已完成订单总数
        Integer courseNoNums = mapper.getToExamineNums(2,"2");//待审核课程 type:2（课程） result:2（待审核）
        Integer commodityNoNums = mapper.getToExamineNums(3,"2");//待审核商品 type:3（商品） result:2（待审核）
        Integer returnRequest = mapper.getOrderQuantityStatus(7);//退订数量
        Integer orderQuantityNums = mapper.getOrderQuantityNums();//查询订单总数

        orderQuantity.setCommodityNums(commodityNums);
        orderQuantity.setCommoditySaleNums(commoditySaleNums);
        orderQuantity.setCommodityCollectionNums(commodityCollectionNums);
        orderQuantity.setCompletedOrder(completedOrder);
        orderQuantity.setCourseNoNums(courseNoNums);
        orderQuantity.setCommodityNoNums(commodityNoNums);
        orderQuantity.setReturnRequest(returnRequest);
        orderQuantity.setOrderQuantityNums(orderQuantityNums);
        return orderQuantity;
    }

    //获取人事首页信息
    @Override
    public OrderQuantity getSystemIndexPersonnelMattersNums() {
        OrderQuantity orderQuantity = new OrderQuantity();
        Integer beforeUserAllNums = mapper.getBeforeUserAllNums();//前端用户总数
        Integer afterUserNums = mapper.getAfterUserNums();//后台用户总数
        Integer jinSiUserNums = mapper.getJinSiUserNums();//进思用户总数
        Integer noJinSiUserNums = beforeUserAllNums-jinSiUserNums;//非进思用户总数
        Integer applyRecordNoHandle = mapper.getApplyRecordNoHandle(1);//创作者认证待处理总数 result：1 待审核
        orderQuantity.setBeforeUserAllNums(beforeUserAllNums);
        orderQuantity.setAfterUserNums(afterUserNums);
        orderQuantity.setJinSiUserNums(jinSiUserNums);
        orderQuantity.setNoJinSiUserNums(noJinSiUserNums);
        orderQuantity.setApplyRecordNoHandle(applyRecordNoHandle);
        return orderQuantity;
    }

    //获取教师运营首页信息
    @Override
    public OrderQuantity getSystemIndexTeacherOperate() {
        OrderQuantity orderQuantity = new OrderQuantity();
        Integer courseNums = mapper.getCourseNums(2,4);//查询上架课程总数 courseStatus:2（上架） courseCstatus:4（审核通过）
        Integer commodityNums = mapper.getCommodityNums(1,"1");//查询上架商品总数 productSate:1（上架） result:1 （审核通过）
        JsCourse jsCourse = new JsCourse();
        jsCourse.setCourseStatus(2);//courseStatus:2（上架）
        jsCourse.setCourseCstatus(4);//courseCstatus:4（审核通过）
        JsCourse courseStatusNums = mapper.getCourseStatusNums(jsCourse);//课程浏览数、收藏量、点赞量
        Integer commoditySaleNums = mapper.getCommoditySaleNums(6, 3);//商品销量总数 orderStatus：6 已签收 orderType：3 商品
        Integer courseNoNums = mapper.getToExamineNums(2,"2");//待审核课程 type:2（课程） result:2（待审核）
        Integer commodityNoNums = mapper.getToExamineNums(3,"2");//待审核商品 type:3（商品） result:2（待审核）
        Integer microCircleNoNums = mapper.getToExamineNums(4,"2");//待审核微圈 type:4（微圈） result:2（待审核）
        Integer returnRequest = mapper.getOrderQuantityStatus(7);//退订数量
        orderQuantity.setCourseNums(courseNums);
        orderQuantity.setCommodityNums(commodityNums);
        orderQuantity.setCourseLikeNums(courseStatusNums.getLikeNum());
        orderQuantity.setCommoditySaleNums(commoditySaleNums);
        orderQuantity.setCourseNoNums(courseNoNums);
        orderQuantity.setCommodityNoNums(commodityNoNums);
        orderQuantity.setMicroCircleNoNums(microCircleNoNums);
        orderQuantity.setReturnRequest(returnRequest);
        return orderQuantity;
    }

    //获取运营人事首页信息
    @Override
    public OrderQuantity getSystemIndexOperatePersonnelmatters() {
        OrderQuantity orderQuantity = new OrderQuantity();
        Integer commodityNums = mapper.getCommodityNums(1,"1");//查询上架商品总数 productSate:1（上架） result:1 （审核通过）
        Integer commoditySaleNums = mapper.getCommoditySaleNums(6, 3);//商品销量总数 orderStatus：6 已签收 orderType：3 商品
        Integer beforeUserAllNums = mapper.getBeforeUserAllNums();//前端用户总数
        Integer afterUserNums = mapper.getAfterUserNums();//后台用户总数
        Integer orderQuantityNums = mapper.getOrderQuantityNums();//查询订单总数
        Integer completedOrder = mapper.getOrderQuantityStatus(6);//已完成订单总数
        Integer courseNoNums = mapper.getToExamineNums(2,"2");//待审核课程 type:2（课程） result:2（待审核）
        Integer commodityNoNums = mapper.getToExamineNums(3,"2");//待审核商品 type:3（商品） result:2（待审核）
        Integer returnRequest = mapper.getOrderQuantityStatus(7);//退订数量
        Integer applyRecordNoHandle = mapper.getApplyRecordNoHandle(1);//创作者认证待处理总数 result：1 待审核
        orderQuantity.setCommodityNums(commodityNums);
        orderQuantity.setCommoditySaleNums(commoditySaleNums);
        orderQuantity.setBeforeUserAllNums(beforeUserAllNums);
        orderQuantity.setAfterUserNums(afterUserNums);
        orderQuantity.setOrderQuantityNums(orderQuantityNums);
        orderQuantity.setCompletedOrder(completedOrder);
        orderQuantity.setCourseNoNums(courseNoNums);
        orderQuantity.setCommodityNoNums(commodityNoNums);
        orderQuantity.setReturnRequest(returnRequest);
        orderQuantity.setApplyRecordNoHandle(applyRecordNoHandle);
        return orderQuantity;
    }

    //查询人事教师首页
    @Override
    public OrderQuantity getSystemIndexPersonnelmattersTeacher() {
        OrderQuantity orderQuantity = new OrderQuantity();
        Integer beforeUserAllNums = mapper.getBeforeUserAllNums();//前端用户总数
        Integer afterUserNums = mapper.getAfterUserNums();//后台用户总数
        Integer courseNums = mapper.getCourseNums(2,4);//查询上架课程总数 courseStatus:2（上架） courseCstatus:4（审核通过）
        JsCourse jsCourse = new JsCourse();
        jsCourse.setCourseStatus(2);//courseStatus:2（上架）
        jsCourse.setCourseCstatus(4);//courseCstatus:4（审核通过）
        JsCourse courseStatusNums = mapper.getCourseStatusNums(jsCourse);//课程浏览数、收藏量、点赞量
        Integer courseNoNums = mapper.getToExamineNums(2,"2");//待审核课程 type:2（课程） result:2（待审核）
        Integer microCircleNoNums = mapper.getToExamineNums(4,"2");//待审核微圈 type:4（微圈） result:2（待审核）
        Integer applyRecordNoHandle = mapper.getApplyRecordNoHandle(1);//创作者认证待处理总数 result：1 待审核
        orderQuantity.setBeforeUserAllNums(beforeUserAllNums);
        orderQuantity.setAfterUserNums(afterUserNums);
        orderQuantity.setCourseNums(courseNums);
        orderQuantity.setCourseLikeNums(courseStatusNums.getLikeNum());
        orderQuantity.setCourseNoNums(courseNoNums);
        orderQuantity.setMicroCircleNoNums(microCircleNoNums);
        orderQuantity.setApplyRecordNoHandle(applyRecordNoHandle);
        return orderQuantity;
    }

    //查询教师人事运营首页
    @Override
    public OrderQuantity getSystemIndexAll() {
        OrderQuantity orderQuantity = new OrderQuantity();
        Integer commodityNums = mapper.getCommodityNums(1,"1");//查询上架商品总数 productSate:1（上架） result:1 （审核通过）
        Integer courseNums = mapper.getCourseNums(2,4);//查询上架课程总数 courseStatus:2（上架） courseCstatus:4（审核通过）
        Integer beforeUserAllNums = mapper.getBeforeUserAllNums();//前端用户总数
        Integer afterUserNums = mapper.getAfterUserNums();//后台用户总数
        Integer courseNoNums = mapper.getToExamineNums(2,"2");//待审核课程 type:2（课程） result:2（待审核）
        Integer commodityNoNums = mapper.getToExamineNums(3,"2");//待审核商品 type:3（商品） result:2（待审核）
        Integer microCircleNoNums = mapper.getToExamineNums(4,"2");//待审核微圈 type:4（微圈） result:2（待审核）
        Integer applyRecordNoHandle = mapper.getApplyRecordNoHandle(1);//创作者认证待处理总数 result：1 待审核
        Integer orderQuantityNums = mapper.getOrderQuantityNums();//查询订单总数
        Integer completedOrder = mapper.getOrderQuantityStatus(6);//已完成订单总数
        orderQuantity.setCommodityNums(commodityNums);
        orderQuantity.setCourseNums(courseNums);
        orderQuantity.setBeforeUserAllNums(beforeUserAllNums);
        orderQuantity.setAfterUserNums(afterUserNums);
        orderQuantity.setCourseNoNums(courseNoNums);
        orderQuantity.setCommodityNoNums(commodityNoNums);
        orderQuantity.setMicroCircleNoNums(microCircleNoNums);
        orderQuantity.setApplyRecordNoHandle(applyRecordNoHandle);
        orderQuantity.setOrderQuantityNums(orderQuantityNums);
        orderQuantity.setCompletedOrder(completedOrder);
        return orderQuantity;
    }
}